iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
Build on AWS

AWS 雲原生,學起來比泡咖啡還快系列 第 24

DAY24 - 小李的 EKS 監控實戰:CloudWatch 可觀測性套件安裝指南

  • 分享至 

  • xImage
  •  

前情提要

還記得小李和他的餐廳帝國嗎?在上一個故事中,我們看到小李如何從一家小麵店發展成全球連鎖企業,也見證了監控系統從簡單的人工記錄演進到複雜的 EKS 微服務監控。

現在,故事要進入實戰階段了。小張(那位 Google 出身的 SRE 專家)決定手把手教小李的技術團隊,如何在 EKS 上安裝和配置 CloudWatch 可觀測性套件。

「理論講得再多,不如實際動手做一遍,」小張對小李說,「今天我們就來實際部署監控系統,讓你親眼看看這些神奇的工具是怎麼運作的。」

第一章:準備工作 - 「工欲善其事,必先利其器」

小李的疑問

「在開始之前,我需要準備什麼嗎?」小李問小張。

小張笑了笑:「你需要的東西其實不多,但每一樣都很重要。就像開餐廳需要營業執照一樣,我們也需要一些基本的『證件』。」

必要條件檢查清單

小張在白板上寫下了準備清單:

1. AWS 帳號和權限
「首先,你需要一個 AWS 帳號,而且要有足夠的權限。」小張解釋,「就像你需要有權限才能在各個分店安裝監控設備一樣。」

需要的權限包括:

  • EKS 集群的管理權限
  • CloudWatch 的完整存取權限
  • IAM 角色和政策的建立權限
  • EC2 和 VPC 的讀取權限

2. 現有的 EKS 集群
「當然,你需要一個正在運行的 EKS 集群。如果還沒有,我們需要先建立一個。」

3. kubectl 工具
「這是我們和 Kubernetes 溝通的工具,就像遙控器一樣。」

4. AWS CLI(可選)
「雖然我們主要用 Console 操作,但有時候命令列工具會很方便。」

檢查現有環境

小張打開 AWS Console,開始檢查環境:

「讓我們先看看你現在的 EKS 集群狀況。」她導航到 EKS 服務頁面。

「你看,這裡顯示你有一個叫 production-cluster 的集群,狀態是 Active,這很好。」小張指著螢幕說,「集群版本是 1.28,節點群組有 3 個節點,看起來一切正常。」

小李湊近螢幕:「這些數字代表什麼意思?」

「簡單來說,你的『城市』(集群)正在正常運作,有 3 棟『建築物』(節點)可以容納你的『居民』(Pod)。現在我們要給這座城市安裝一套完整的監控系統。」

第二章:啟用 Container Insights - 「安裝城市的第一套監控系統」

什麼是 Container Insights?

「Container Insights 就像是我們城市的基礎監控系統,」小張解釋,「它會自動收集所有建築物(節點)和居民(容器)的基本資訊,比如他們用了多少電(CPU)、多少水(記憶體)、產生了多少垃圾(日誌)。」

步驟一:進入 CloudWatch Console

小張開始實際操作:

  1. 打開 AWS Console
    「首先,我們進入 AWS 管理控制台。」

  2. 導航到 CloudWatch
    「在服務列表中找到 CloudWatch,或者直接在搜尋框輸入 'CloudWatch'。」

  3. 找到 Container Insights
    「在左側選單中,找到『Insights』區塊,點擊『Container Insights』。」
    https://ithelp.ithome.com.tw/upload/images/20250926/20145462rKGRqZ6DqN.png

小李看著螢幕:「哇,這個介面看起來很複雜。」

「別擔心,」小張安慰他,「我們一步一步來。你看到這個頁面顯示『No data available』,這是因為我們還沒有啟用監控。」

步驟二:建立必要的 IAM 角色

「現在系統會提示我們建立一些 IAM 角色,」小張說,「這就像給監控人員發放工作證,讓他們有權限進入各個區域收集資料。」

1. 建立 IRSA Role:
    a. 請登入 AWS Management Console,並前往 https://console.aws.amazon.com/iam/  開啟 IAM 主控台
    b. 在主控台的導覽窗格中,請選擇「角色」,接著選擇「建立角色」
    c. 請選擇 AWS 帳戶角色類型(Web identity)
        - 在cloudshell 執行這段CLI 查詢 身分提供者 
        ```
        aws eks describe-cluster --name my-cluster --region us-east-1 --query "cluster.identity.oidc.issuer" --output text
        ```
        - 選擇身分提供者(https://oidc.eks.us-east-1.amazonaws.com/id/3835xxxxxx) 
        - 選擇對象(sts.amazonaws.com)
    d. 請選擇「下一步」
    e. 請選取權限政策(CloudWatchAgentServerPolicy)
    f. 請選擇「下一步」
    g. 在「角色名稱」欄位中,請輸入您想要的角色名稱(需在您的 AWS 帳戶中保持唯一性)
    h. 請檢視角色設定,確認無誤後選擇「建立角色」

步驟四:確認安裝

「點擊『Set up Container Insights』後,系統會開始安裝必要的組件,」小張說,「這個過程大概需要 5-10 分鐘。」

小李看著進度條:「它在做什麼?」

「系統正在你的 EKS 集群中部署幾個重要組件:」

  • CloudWatch Agent:「負責收集指標資料」
  • Fluent Bit:「負責收集和處理日誌」
  • 必要的配置檔案:「告訴這些工具該收集什麼資料」

第三章:驗證安裝結果 - 「檢查監控系統是否正常運作」

等待的藝術

「安裝完成後,我們需要等待一些時間讓資料開始流入,」小張說,「就像新開的餐廳需要時間才會有客人一樣,監控系統也需要時間才會有資料。」

小李有點不耐煩:「要等多久?」

「通常 10-15 分鐘就會開始看到資料,」小張說,「我們可以先去喝杯咖啡。」

檢查安裝狀態

15 分鐘後,小張和小李回到電腦前:

  1. 檢查 Container Insights 儀表板
    「現在重新整理 Container Insights 頁面,你應該會看到資料開始出現。」

    果然,原本空白的頁面現在顯示了各種圖表:

    • 集群概覽
    • 節點效能
    • Pod 狀態
    • 服務地圖
  2. 驗證資料收集
    小張指著螢幕上的圖表:「你看,這裡顯示你的集群有 3 個節點,總共運行著 25 個 Pod,CPU 使用率平均 35%,記憶體使用率 42%。」

    小李興奮地說:「這些數字是即時的嗎?」

    「對,每分鐘更新一次。你可以看到這些線條在慢慢變化,就像心電圖一樣顯示你系統的『心跳』。」

小李看得目不轉睛:「這比我想像的還要詳細!」

https://ithelp.ithome.com.tw/upload/images/20250926/20145462uCUxuhKIBc.png

第四章:設定告警 - 「建立預警系統」

為什麼需要告警?

「有了監控資料還不夠,」小張說,「我們需要設定告警,這樣當有問題時系統會主動通知我們,而不是等我們發現。」

「就像餐廳的火災警報器一樣?」小李問。

「沒錯!而且我們可以設定不同級別的告警,比如『注意』、『警告』、『緊急』。」

建立第一個告警

小張開始設定告警:

  1. 進入 CloudWatch Alarms
    「在 CloudWatch 左側選單中,點擊『Alarms』。」

  2. 建立新告警
    「點擊『Create alarm』按鈕。」

  3. 選擇指標
    「我們先建立一個 CPU 使用率的告警。在指標瀏覽器中,選擇:」

    • Namespace: ContainerInsights
    • Metric name: node_cpu_utilization
    • ClusterName: production-cluster
  4. 設定條件
    小張解釋告警條件:

    • 閾值類型:Static(靜態閾值)
    • 條件:Greater than(大於)
    • 閾值:80(80%)
    • 評估期間:2 個連續的 5 分鐘期間

    「這意味著如果 CPU 使用率連續 10 分鐘超過 80%,就會觸發告警。」

  5. 配置通知
    「現在我們需要設定當告警觸發時要通知誰。」

    小張建立了一個 SNS 主題:

    • 主題名稱eks-alerts
    • 訂閱者:小李的電子郵件

測試告警系統

「我們來測試一下告警是否正常工作,」小張說。

她暫時把 CPU 告警閾值調低到 30%:「這樣我們很快就會收到告警,確認系統正常運作。」

果然,幾分鐘後小李的手機響了,收到一封郵件:

ALARM: "EKS-CPU-High" in Asia Pacific (Tokyo)
Reason: Threshold Crossed: 1 out of the last 1 datapoints [35.2] was greater than the threshold (30.0).

「太神奇了!」小李驚呼,「它真的會主動通知我!」

小張把閾值調回 80%:「現在你知道告警系統是有效的。我們可以為不同的指標設定不同的告警。」

第五章:自訂儀表板 - 「打造專屬的監控中心」

為什麼需要自訂儀表板?

「預設的 Container Insights 儀表板很好,但每個企業都有自己的特殊需求,」小張說,「就像每家餐廳都有自己關注的重點指標一樣。」

小李點頭:「對,我最關心的是訂單處理速度和客戶滿意度,這些在預設儀表板上看不到。」

建立自訂儀表板

小張開始建立自訂儀表板:

  1. 進入 CloudWatch Dashboards
    「在 CloudWatch 左側選單中,點擊『Dashboards』。」

  2. 建立新儀表板
    「點擊『Create dashboard』,給它一個有意義的名稱,比如『Production EKS Overview』。」

  3. 添加第一個小工具
    「我們先添加一個顯示集群整體健康狀況的小工具。」

    小張選擇了「Line」圖表類型,然後配置:

    • 指標node_cpu_utilizationnode_memory_utilization
    • 時間範圍:過去 24 小時
    • 統計:平均值
  4. 添加更多小工具
    小張繼續添加:

    • Pod 狀態圓餅圖:顯示 Running、Pending、Failed Pod 的比例
    • 網路流量圖表:顯示進出流量
    • 錯誤率趨勢:顯示應用程式錯誤率變化
    • 回應時間分布:顯示 API 回應時間

客製化顯示

「你可以調整每個圖表的大小、位置、顏色,」小張說,「讓儀表板符合你的使用習慣。」

她示範了幾個客製化選項:

  • 調整圖表大小:拖拉圖表邊角
  • 移動圖表位置:拖拉圖表標題列
  • 修改顏色主題:選擇不同的配色方案
  • 設定自動重新整理:每 1 分鐘、5 分鐘或 15 分鐘

小李看著完成的儀表板:「這看起來就像我們餐廳的中央監控室!」

第六章:日誌分析 - 「深入了解系統內部」

日誌的重要性

「指標告訴我們『發生了什麼』,但日誌告訴我們『為什麼發生』,」小張解釋,「就像餐廳的監視器錄影,當有問題時我們可以回放查看詳細過程。」

使用 CloudWatch Logs Insights

小張導航到 CloudWatch Logs Insights:

  1. 選擇日誌群組
    「Container Insights 會自動建立幾個日誌群組:」

    • /aws/containerinsights/production-cluster/application
    • /aws/containerinsights/production-cluster/host
    • /aws/containerinsights/production-cluster/dataplane
  2. 撰寫查詢
    「我們可以用類似 SQL 的語法來查詢日誌。」

    小張示範了幾個常用查詢:

    查找錯誤日誌:

    fields @timestamp, @message
    | filter @message like /ERROR/
    | sort @timestamp desc
    | limit 100
    

    分析回應時間:

    fields @timestamp, @message
    | filter @message like /response_time/
    | stats avg(response_time) by bin(5m)
    

    統計不同服務的日誌量:

    fields @timestamp, kubernetes.pod_name
    | stats count() by kubernetes.pod_name
    | sort count desc
    

實際案例分析

「讓我們來分析一個實際問題,」小張說。

她執行了一個查詢來查找最近的錯誤:

fields @timestamp, @message, kubernetes.pod_name
| filter @message like /500/ or @message like /ERROR/
| sort @timestamp desc
| limit 50

結果顯示了幾條錯誤記錄:

2024-03-15 14:30:25  ERROR: Database connection timeout  payment-service-abc123
2024-03-15 14:30:20  HTTP 500: Internal server error     order-service-def456
2024-03-15 14:30:15  ERROR: Redis connection failed      cache-service-ghi789

「你看,這些錯誤都發生在同一時間段,而且都與連接有關,」小張分析,「這可能表示網路或基礎設施有問題。」

小李恍然大悟:「所以日誌不只是記錄,還能幫我們找到問題的模式!」

第七章:效能優化建議 - 「讓監控系統更高效」

成本控制

「監控系統很有用,但也會產生成本,」小張提醒,「我們需要在監控深度和成本之間找到平衡。」

她分享了幾個成本優化技巧:

1. 調整指標收集頻率
「不是所有指標都需要每分鐘收集一次。對於變化較慢的指標,可以調整為每 5 分鐘或 15 分鐘收集一次。」

2. 設定日誌保留期限
「根據合規要求和實際需求設定日誌保留期限:」

  • 應用程式日誌:7-30 天
  • 系統日誌:30-90 天
  • 審計日誌:1-7 年

3. 使用日誌過濾
「只收集重要的日誌,過濾掉不必要的資訊。」

效能調優

1. 合理設定告警閾值
「閾值設得太低會產生太多誤報,設得太高可能錯過真正的問題。建議根據歷史資料設定動態閾值。」

2. 使用標籤管理
「善用標籤來組織和過濾監控資料,這樣可以更快找到需要的資訊。」

3. 定期檢視和清理
「定期檢視監控配置,移除不再需要的告警和儀表板。」

結語:監控之路的開始

小李的感想

安裝和配置完成後,小李看著滿螢幕的圖表和數據,感慨地說:「我從來沒想過監控一個系統需要這麼多細節。」

小張笑了:「這只是開始。監控系統就像一個活的生物,它會隨著你的業務成長而不斷演進。重要的是要持續學習和改進。」

下一步計劃

「現在我們有了基礎的監控,接下來可以考慮:」

  1. 整合更多資料來源:比如應用程式自定義指標
  2. 建立更複雜的告警規則:比如基於多個指標的複合告警
  3. 自動化回應:當某些告警觸發時自動執行修復動作
  4. 機器學習異常檢測:使用 AI 來發現異常模式

給讀者的建議

如果你也想為自己的 EKS 集群建立監控系統,記住這些要點:

  1. 從簡單開始:不要一開始就想建立完美的監控系統
  2. 關注業務價值:監控的目的是改善業務,不是收集數據
  3. 持續改進:監控系統需要不斷調整和優化
  4. 團隊協作:讓整個團隊都參與監控系統的建立和維護

「監控不是一次性的工作,而是一個持續的過程,」小張最後說,「但一旦建立起來,它會成為你最可靠的夥伴,幫助你更好地了解和管理你的系統。」

小李點點頭:「我已經迫不及待想看到明天的監控報告了!」


這個故事展示了如何使用 AWS Console 為 EKS 集群安裝和配置 CloudWatch 可觀測性套件。雖然過程看似複雜,但每一步都有其重要意義。記住,好的監控系統不是一天建成的,需要時間、耐心和持續的改進。


上一篇
DAY23 - EKS後的下一步? 一個關於監控演進的故事:從小餐廳到跨國連鎖企業
系列文
AWS 雲原生,學起來比泡咖啡還快24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言